﻿<html DIR="LTR" xmlns:tool="http://www.microsoft.com/tooltip" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ddue="http://ddue.schemas.microsoft.com/authoring/2003/5" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
  <head>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=utf-8" />
    <META NAME="save" CONTENT="history" />
    <title>Usando tipos de dados básicos</title>
    
    <link rel="stylesheet" type="text/css" href="../local/Classic.css">
      
    </link>
    
    <script src="../local/script.js">
      
    </script><script src="../local/script_main.js">&amp;nbsp;</script>
  </head>
  <body>
    <!--Topic built:04/01/2010 05:03:30-->

    
    
    
    
    
    
    
    
    
    <div id="header">
      <table width="100%" id="topTable"><tr>
          <td align="left">
            <span id="headerBold">Usando tipos de dados básicos</span>
          </td>
          <td align="right">
            
          </td>
        </tr></table>
      
      
      
    </div>
    <div id="mainSection">
      
        
        
    <font color="DarkGray">
      
    </font>
    <p />
    
    <p />
  
        <div id="introductionSection" class="section">
    <p>O Microsoft SQL Server JDBC Driver usa os tipos de dados básicos JDBC para converter os tipos de dados do SQL Server para um formato que pode ser entendido pela linguagem de programação Java e vice-versa. A partir do Microsoft SQL Server JDBC Driver versão 2.0, o driver JDBC oferece suporte para a API do JDBC 4.0, que inclui os tipos de dados <b>SQLXML</b> e os tipos de dados Nacionais (Unicode), como, por exemplo, <b>NCHAR</b>, <b>NVARCHAR</b>, <b>LONGNVARCHAR</b> e <b>NCLOB</b>. </p>
  </div><h1 class="heading">Mapeamentos de tipo de dados</h1><div id="sectionSection0" class="section"><content xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5">
      <p xmlns="">A tabela a seguir lista os mapeamentos padrão entre o SQL Server básico, o JDBC e os tipos de dados da linguagem de programação Java.</p>
      <table width="100%" cellspacing="0" cellpadding="0" border="1" style="background-color: #CCCCCC;" xmlns=""><tr>
            <th>
              Tipos de SQL Server
            </th>
            <th>
              Tipos JDBC (java.sql.Types)
            </th>
            <th>
              Tipos da linguagem Java
            </th>
          </tr><tr>
          <td>
            <p>bigint</p>
          </td>
          <td>
            <p>BIGINT</p>
          </td>
          <td>
            <p>long</p>
          </td>
        </tr><tr>
          <td>
            <p>carimbo de data/hora</p>
            <p>binary</p>
          </td>
          <td>
            <p>BINARY</p>
          </td>
          <td>
            <p>byte[]</p>
          </td>
        </tr><tr>
          <td>
            <p>bit</p>
          </td>
          <td>
            <p>BIT</p>
          </td>
          <td>
            <p>boolean</p>
          </td>
        </tr><tr>
          <td>
            <p>char</p>
          </td>
          <td>
            <p>CHAR</p>
          </td>
          <td>
            <p>Cadeia de caracteres</p>
          </td>
        </tr><tr>
          <td>
            <p>decimal</p>
            <p>money</p>
            <p>smallmoney</p>
          </td>
          <td>
            <p>DECIMAL</p>
          </td>
          <td>
            <p>java.math.BigDecimal</p>
          </td>
        </tr><tr>
          <td>
            <p>float</p>
          </td>
          <td>
            <p>DOUBLE</p>
          </td>
          <td>
            <p>double</p>
          </td>
        </tr><tr>
          <td>
            <p>int</p>
          </td>
          <td>
            <p>INTEGER</p>
          </td>
          <td>
            <p>int</p>
          </td>
        </tr><tr>
          <td>
            <p>imagem</p>
            <p>varbinary(max)</p>
          </td>
          <td>
            <p>LONGVARBINARY</p>
          </td>
          <td>
            <p>byte[]</p>
          </td>
        </tr><tr>
          <td>
            <p>varchar(max)</p>
            <p>text</p>
          </td>
          <td>
            <p>LONGVARCHAR</p>
          </td>
          <td>
            <p>Cadeia de caracteres</p>
          </td>
        </tr><tr>
          <td>
            <p>nchar</p>
          </td>
          <td>
            <p>CHAR</p>
            <p>NCHAR (Java SE 6.0)</p>
          </td>
          <td>
            <p>Cadeia de caracteres</p>
          </td>
        </tr><tr>
          <td>
            <p>nvarchar</p>
          </td>
          <td>
            <p>VARCHAR</p>
            <p>NVARCHAR (Java SE 6.0)</p>
          </td>
          <td>
            <p>Cadeia de caracteres</p>
          </td>
        </tr><tr>
          <td>
            <p>nvarchar(max)</p>
            <p>ntext</p>
          </td>
          <td>
            <p>LONGVARCHAR</p>
            <p>LONGNVARCHAR (Java SE 6.0)</p>
          </td>
          <td>
            <p>Cadeia de caracteres</p>
          </td>
        </tr><tr>
          <td>
            <p>numeric</p>
          </td>
          <td>
            <p>NUMERIC</p>
          </td>
          <td>
            <p>java.math.BigDecimal</p>
          </td>
        </tr><tr>
          <td>
            <p>real</p>
          </td>
          <td>
            <p>REAL</p>
          </td>
          <td>
            <p>float</p>
          </td>
        </tr><tr>
          <td>
            <p>smallint</p>
          </td>
          <td>
            <p>SMALLINT</p>
          </td>
          <td>
            <p>short</p>
          </td>
        </tr><tr>
          <td>
            <p>datetime</p>
            <p>smalldatetime</p>
          </td>
          <td>
            <p>TIMESTAMP</p>
          </td>
          <td>
            <p>java.sql.Timestamp</p>
          </td>
        </tr><tr>
          <td>
            <p>varbinary</p>
            <p>udt</p>
          </td>
          <td>
            <p>VARBINARY</p>
          </td>
          <td>
            <p>byte[]</p>
          </td>
        </tr><tr>
          <td>
            <p>varchar</p>
          </td>
          <td>
            <p>VARCHAR</p>
          </td>
          <td>
            <p>Cadeia de caracteres</p>
          </td>
        </tr><tr>
          <td>
            <p>tinyint</p>
          </td>
          <td>
            <p>TINYINT</p>
          </td>
          <td>
            <p>short</p>
          </td>
        </tr><tr>
          <td>
            <p>uniqueidentifier</p>
          </td>
          <td>
            <p>CHAR</p>
          </td>
          <td>
            <p>String</p>
          </td>
        </tr><tr>
          <td>
            <p>xml</p>
          </td>
          <td>
            <p>LONGVARCHAR</p>
            <p>SQLXML (Java SE 6.0)</p>
          </td>
          <td>
            <p>String</p>
            <p>SQLXML</p>
          </td>
        </tr><tr>
          <td>
            <p>time</p>
          </td>
          <td>
            <p>TIME (1)</p>
          </td>
          <td>
            <p>java.sql.Time (1)</p>
          </td>
        </tr><tr>
          <td>
            <p>date</p>
          </td>
          <td>
            <p>DATE</p>
          </td>
          <td>
            <p>java.sql.Date</p>
          </td>
        </tr><tr>
          <td>
            <p>datetime2</p>
          </td>
          <td>
            <p>TIMESTAMP</p>
          </td>
          <td>
            <p>java.sql.Timestamp</p>
          </td>
        </tr><tr>
          <td>
            <p>datetimeoffset (2)</p>
          </td>
          <td>
            <p>microsoft.sql.Types.DATETIMEOFFSET</p>
          </td>
          <td>
            <p>microsoft.sql.DateTimeOffset</p>
          </td>
        </tr></table>
      <p xmlns="">(1) para usar java.sql.Time com o tipo time de SQL Server, você deve definir a propriedade de conexão <b>sendTimeAsDatetime</b> como false.</p>
      <p xmlns="">(2) Você pode acessar valores de <b>datetimeoffset</b> programaticamente com <a href="20bbeacd-ccca-4a46-8184-ff941ae2ec5f.htm">Classe DateTimeOffset</a>.</p>
      <p xmlns="">O tipo de dados sqlvariant do SQL Server atualmente não tem suporte do JDBC Driver. Se uma consulta for usada para recuperar dados de uma tabela que contém uma coluna do tipo de dados sqlvariant, ocorrerá uma exceção. </p>
      <p xmlns="">As seções a seguir fornecem exemplos de como é possível usar o JDBC Driver e os tipos de dados básicos. Para obter exemplos mais detalhados sobre como usar os tipos de dados básicos em um aplicativo Java, consulte <a href="59ac80cf-fc66-4493-933d-38e479c5f54d.htm">Exemplo de tipos de dados básicos</a>.</p>
    </content></div><h1 class="heading">Recuperando dados como uma cadeia de caracteres</h1><div id="sectionSection1" class="section"><content xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5">
      <p xmlns="">Se desejar recuperar dados de uma fonte de dados que mapeia para um dos tipos de dados básicos do JDBC para ser exibido como uma cadeia de caracteres, ou se não for necessário usar dados com rigidez de tipos, você poderá usar o método <a href="f81dde01-d328-4b32-8871-1efac645b68e.htm">getString</a> da classe <a href="eaffcff1-286c-459f-83da-3150778480c9.htm">SQLServerResultSet</a>, da seguinte maneira:</p>
      <div class="sampleCode" xmlns=""><span codeLanguage="other"><pre>String SQL = "SELECT TOP 10 * FROM Person.Contact";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(SQL);

while (rs.next()) {
   System.out.println(rs.getString(4) + " " + rs.getString(6));
}
rs.close();
stmt.close();
</pre></span></div>
    </content></div><h1 class="heading">Recuperando dados por tipo de dados</h1><div id="sectionSection2" class="section"><content xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5">
      <p xmlns="">Se tiver que recuperar dados de uma fonte de dados e souber o tipo de dados que estão sendo recuperados, use um dos métodos <b>get&lt;Type&gt;</b> da classe <b>SQLServerResultSet</b>, também conhecidos como <i>métodos getter</i>. Você pode usar um nome de coluna ou um índice de coluna com os métodos <b>get&lt;Type&gt;</b>, da seguinte maneira:</p>
      <div class="sampleCode" xmlns=""><span codeLanguage="other"><pre>ResultSet rs = stmt.executeQuery("SELECT lname, job_id FROM employee
   WHERE (lname = 'Brown')");
rs.next();
short empJobID = rs.getShort("job_id");
rs.close();
stmt.close();
</pre></span></div>
      <div style="margin: .5em 1.5em .5em 1.5em" xmlns=""><b>Observação: </b>
        Os métodos <b>getUnicodeStream</b> e <b>getBigDecimal</b> com escala são substituídos e não têm suporte pelo driver JDBC.<p />
      </div>
    </content></div><h1 class="heading">Atualizando dados por tipo de dados</h1><div id="sectionSection3" class="section"><content xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5">
      <p xmlns="">Se você tiver que atualizar o valor de um campo em uma fonte de dados, use um dos métodos <b>update&lt;Type&gt;</b> da classe <b>SQLServerResultSet</b>. No exemplo a seguir, o método <a href="2bb0319e-12cb-4604-a7e3-b22a24b02296.htm">updateInt</a> é usado junto com o método <a href="cfced0ca-a281-40dc-8d2f-370d5f0bf12b.htm">updateRow</a> para atualizar os dados na fonte de dados:</p>
      <div class="sampleCode" xmlns=""><span codeLanguage="other"><pre>Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); 
ResultSet rs = stmt.executeQuery("SELECT lname, job_id FROM employee
   WHERE (lname = 'Brown')");
rs.next();
short empJobID = rs.getInt(2);
empJobID++;
rs.first();
rs.updateInt(2, empJobID);
rs.updateRow();
rs.close();
stmt.close();
</pre></span></div>
      <div style="margin: .5em 1.5em .5em 1.5em" xmlns=""><b>Observação: </b>
        O driver JDBC não pode atualizar uma coluna do SQL Server com um nome de coluna com mais de 127 caracteres. Se você tentar fazer uma atualização para uma coluna cujo nome tem mais de 127 caracteres, uma exceção será lançada.<p />
      </div>
    </content></div><h1 class="heading">Atualizando dados através de consulta parametrizada</h1><div id="sectionSection4" class="section"><content xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5">
      <p xmlns="">Se você tiver que atualizar dados em uma fonte de dados usando uma consulta parametrizada, poderá definir o tipo de dados dos parâmetros usando um dos métodos <b>set&lt;Type&gt;</b> da classe <a href="a8481c06-fbba-432b-8c69-4f4619c20ad4.htm">SQLServerPreparedStatement</a>, também conhecida como os <i>métodos setter</i>. No exemplo a seguir, o método <a href="bd4e4085-f704-4a73-b6a7-7d443d564728.htm">prepareStatement</a> é usado para pré-compilar a consulta parametrizada e o método <a href="25dabdc9-c60f-485a-87eb-306067964765.htm">setString</a> é usado para definir o valor da cadeia de caracteres do parâmetro antes de o método <a href="ca534c6b-ef4d-4ae8-8cc3-514728623cff.htm">executeUpdate</a> ser chamado.</p>
      <div class="sampleCode" xmlns=""><span codeLanguage="other"><pre>PreparedStatement pstmt = con.prepareStatement("UPDATE employee SET
   fname = ? WHERE (lname = 'Brown')");
String first = "Bob";
pstmt.setString(1, first);
int rowCount = pstmt.executeUpdate();
pstmt.close();
</pre></span></div>
      <p xmlns="">Para obter mais informações sobre consultas parametrizadas, consulte <a href="3202b88f-ce13-44dd-982c-c6a3b0260378.htm">Usando uma instrução SQL com parâmetros</a>.</p>
    </content></div><h1 class="heading">Passando parâmetros para um procedimento armazenado</h1><div id="sectionSection5" class="section"><content xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5">
      <p xmlns="">Se você tiver que passar parâmetros de tipo em um procedimento armazenado, poderá definir os parâmetros através de índice ou pode nomear usando um dos métodos <b>set&lt;Type&gt;</b> da classe <a href="30710a63-c05d-47d9-9cf9-c087a1c76373.htm">SQLServerCallableStatement</a>. No exemplo a seguir, o método <a href="265b024c-898a-4bd0-98b5-f06076717b9e.htm">prepareCall</a> é usado para configurar a chamada ao procedimento armazenado e o método <a href="f38b97b5-d4f0-4f74-a33d-740241a85842.htm">setString</a> é usado para definir o parâmetro para a chamada antes de o método <a href="599cf463-e19f-4baa-bacb-513cad7c6cd8.htm">executeQuery</a> ser chamado. </p>
      <div class="sampleCode" xmlns=""><span codeLanguage="other"><pre>CallableStatement cstmt = con.prepareCall("{call employee_jobid(?)}");
String lname = "Brown";
cstmt.setString(1, lname);
Resultset rs = cstmt.executeQuery();
rs.close();
cstmt.close();
</pre></span></div>
      <div style="margin: .5em 1.5em .5em 1.5em" xmlns=""><b>Observação: </b>
        Neste exemplo, um conjunto de resultados é retornado com os resultados da execução do procedimento armazenado. <p />
      </div>
      <p xmlns="">Para obter mais informações sobre como usar o driver JDBC com procedimentos armazenados e parâmetros de entrada, consulte <a href="8f491b70-7d1b-42bd-964f-9a8b86af5eaa.htm">Usando um procedimento armazenado com parâmetros de entrada</a>.</p>
    </content></div><h1 class="heading">Recuperando parâmetros de um procedimento armazenado</h1><div id="sectionSection6" class="section"><content xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5">
      <p xmlns="">Se você tiver que recuperar parâmetros de um procedimento armazenado, primeiro registre um parâmetro OUT por nome ou índice usando o método <a href="82f8d608-efc1-4af8-a985-ec25d19420aa.htm">registerOutParameter</a> da classe <b>SQLServerCallableStatement</b> e, em seguida, atribua o parâmetro OUT retornado a uma variável apropriada depois de executar a chamada ao procedimento armazenado. No exemplo a seguir, o método <b>prepareCall</b> é usado para configurar a chamada ao procedimento armazenado, o método <b>registerOutParameter</b> é usado para configurar o parâmetro OUT e o método <a href="f38b97b5-d4f0-4f74-a33d-740241a85842.htm">setString</a> é usado para definir o parâmetro para a chamada antes de o método <b>executeQuery</b> ser chamado. O valor retornado pelo parâmetro OUT do procedimento armazenado é recuperado usando o método <a href="9e3c51bc-7285-4f28-92c8-cfa05e49da9e.htm">getShort</a>.</p>
      <div class="sampleCode" xmlns=""><span codeLanguage="other"><pre>CallableStatement cstmt = con.prepareCall("{call employee_jobid (?, ?)}");
cstmt.registerOutParameter(2, java.sql.Types.SMALLINT);
String lname = "Brown";
cstmt.setString(1, lname);
Resultset rs = cstmt.executeQuery();
short empJobID = cstmt.getShort(2);
rs.close();
cstmt.close();
</pre></span></div>
      <div style="margin: .5em 1.5em .5em 1.5em" xmlns=""><b>Observação: </b>
        Além do parâmetro OUT retornado, um conjunto de resultados também pode ser retornado com os resultados da execução do procedimento armazenado.<p />
      </div>
      <p xmlns="">Para obter mais informações sobre como usar o driver JDBC com procedimentos armazenados e parâmetros de saída, consulte <a href="1c006f27-7e99-43d5-974c-7b782659290c.htm">Usando um procedimento armazenado com parâmetros de saída</a>.</p>
    </content></div><span id="seeAlsoSpan"><h1 class="heading">Consulte também</h1></span><div id="seeAlsoSection" class="section" name="collapseableSection"><a href="7802328d-4d23-4775-9573-4169b127d258.htm">Entendendo os tipos de dados do JDBC Driver</a><br /><br /></div><!--[if gte IE 5]>
			<tool:tip element="seeAlsoToolTip" avoidmouse="false"/><tool:tip element="languageFilterToolTip" avoidmouse="false"/><tool:tip element="roleInfoSpan" avoidmouse="false"/>
		<![endif]-->
      <div id="footer" class="section">
        
		<hr />
		
		<span id="fb" class="feedbackcss">
			
			
		</span>
		
		<a href="9bad553b-9e70-4696-8499-2e35f772a1e0.htm">
			
			© 2010 Microsoft Corporation. Todos os direitos reservados.
		</a>
 	
	
      </div>
    </div>
  </body>
</html>